package com.leenmvc.core.utils.spring;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

/**
 * Spring Context 工具类
 * 
 * @author leen
 */
@Component
public class SpringContextUtils implements ApplicationContextAware {

	public static ApplicationContext applicationContext;

	public static Environment env;;

	@Override
	public void setApplicationContext(ApplicationContext applicationContext)
			throws BeansException {
		SpringContextUtils.applicationContext = applicationContext;
		SpringContextUtils.env = applicationContext.getEnvironment();
	}

	public static <T> T getBean(String name) {
		return (T)applicationContext.getBean(name);
	}

	public static <T> T getBean(Class<?> requiredType) {
		return (T)applicationContext.getBean(requiredType);
	}

	public static <T> T getBean(String name, Class<?> requiredType) {
		return (T)applicationContext.getBean(name, requiredType);
	}

	public static boolean containsBean(String name) {
		return applicationContext.containsBean(name);
	}

	public static boolean isSingleton(String name) {
		return applicationContext.isSingleton(name);
	}

	public static Class<? extends Object> getType(String name) {
		return applicationContext.getType(name);
	}

	/**
	 * 获取环境变量（字符串）
	 *
	 * @param key
	 * @return
	 */
	public static String getStr(String key) {
		return env.getProperty(key);
	}

	/**
	 * 获取环境变量（int）
	 * @param key
	 * @return
	 */
	public static Integer getInt(String key) {
		return Integer.parseInt(env.getProperty(key));
	}

	/**
	 * 获取环境变量（int）
	 * @param key
	 * @return
	 */
	public static Boolean getBoolean(String key) {
		return Boolean.parseBoolean(env.getProperty(key));
	}
}